package com.adee.java;

import java.util.concurrent.CopyOnWriteArrayList;

/*
* CopyOnWriteArrayList底层实现原理（volatile + lock）
* 1. 首先CopyOnWriteArrayList底层也是用数组来实现的，在向CopyOnWriteArrayList添加元素时，会复制一个新的数组，
*    写操作在新的数组上进行，读操作在原数组上进行；
* 2. 写操作会加锁，防止出现并发写入丢失数据的问题；
* 3. 写操作结束之后，会把原数组指向新数组；
* 4. CopyOnWriteArrayList允许在写操作时来读取数据，大大提高了读的性能，因此适合读多写少的应用场景，但是CopyOnWriteArrayList
*    会比较占内存，同时可能读到的数据不是实时最新的数据，所以不适合实时性要求很高的场景。
*
* */
public class Test018_CopyOnWriteArrayList {
    public static void main(String[] args) {
        CopyOnWriteArrayList<String> list = new CopyOnWriteArrayList<>();
        list.add("hello");
        list.get(0);
    }
}
